1 /**
2  * License:
3  *              Copyright Devisualization (Richard Andrew Cattermole) 2014 - 2017.
4  *     Distributed under the Boost Software License, Version 1.0.
5  *        (See accompanying file LICENSE_1_0.txt or copy at
6  *              http://www.boost.org/LICENSE_1_0.txt)
7  */
8 module devisualization.util.photoshop_aco.exporter;
9 import devisualization.util.photoshop_aco.defs;
10 
11 void exportData(ACOPalette _, out ubyte[] data) {
12 	uint offset = 0;
13 	writeData(_, data, 1, offset);
14 	writeData(_, data, 2, offset);
15 }
16 
17 void addValue(ref ubyte[] data, ushort value) {
18 	import std.bitmanip : nativeToBigEndian;
19 	data ~= nativeToBigEndian(value);
20 }
21 
22 void addValue(ref ubyte[] data, uint value) {
23 	import std.bitmanip : nativeToBigEndian;
24 	data ~= nativeToBigEndian(value);
25 }
26 
27 void addValue(ref ubyte[] data, dstring value) {
28 	ubyte[] ret;
29 	foreach(c; value) {
30 		import std.bitmanip : nativeToBigEndian;
31 		ret ~= nativeToBigEndian(c);
32 	}
33 	ret ~= [0, 0]; // null term
34 	data ~= ret;
35 }
36 
37 void writeData(ACOPalette _, ref ubyte[] data, ushort ver, ref uint offset) {
38 	data.addValue(ver);
39 	data.addValue(cast(ushort)_.colors.length);
40 
41 	foreach(i, color; _.colors) {
42 		data.addValue(cast(ushort)0);
43 		data.addValue(color.r);
44 		data.addValue(color.g);
45 		data.addValue(color.b);
46 		data.addValue(0);
47 
48 		if (ver == 2) {
49 			data.addValue(cast(uint)_.names[i].length);
50 			data.addValue(_.names[i]);
51 		}
52 	}
53 }